route.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { NextRequest, NextResponse } from "next/server";
  2. import { PrismaClient } from "@prisma/client";
  3. const prisma = new PrismaClient();
  4. export const GET = async (
  5. req: NextRequest,
  6. { params }: { params: Promise<{ id: string }> }
  7. ) => {
  8. const { id } = await params;
  9. try {
  10. const file = await prisma.file.findUnique({
  11. where: { id },
  12. });
  13. if (!file) {
  14. const response = NextResponse.json(
  15. { error: "File not found" },
  16. { status: 404 }
  17. );
  18. response.headers.set('Access-Control-Allow-Origin', '*');
  19. return response;
  20. }
  21. // Return file as downloadable response
  22. const response = new NextResponse(file.data, {
  23. headers: {
  24. "Content-Type": file.mimetype,
  25. "Content-Disposition": `attachment; filename="${file.filename}"`,
  26. "Content-Length": file.size.toString(),
  27. "Access-Control-Allow-Origin": "*",
  28. },
  29. });
  30. return response;
  31. } catch (error) {
  32. console.error("Error retrieving file:", error);
  33. const response = NextResponse.json(
  34. { error: "Failed to retrieve file" },
  35. { status: 500 }
  36. );
  37. response.headers.set('Access-Control-Allow-Origin', '*');
  38. return response;
  39. } finally {
  40. await prisma.$disconnect();
  41. }
  42. };
  43. export const DELETE = async (
  44. req: NextRequest,
  45. { params }: { params: Promise<{ id: string }> }
  46. ) => {
  47. const { id } = await params;
  48. try {
  49. const file = await prisma.file.findUnique({
  50. where: { id },
  51. });
  52. if (!file) {
  53. const response = NextResponse.json(
  54. { error: "File not found" },
  55. { status: 404 }
  56. );
  57. response.headers.set('Access-Control-Allow-Origin', '*');
  58. return response;
  59. }
  60. await prisma.file.delete({
  61. where: { id },
  62. });
  63. const response = NextResponse.json(
  64. { message: "File deleted successfully" },
  65. { status: 200 }
  66. );
  67. response.headers.set('Access-Control-Allow-Origin', '*');
  68. return response;
  69. } catch (error) {
  70. console.error("Error deleting file:", error);
  71. const response = NextResponse.json(
  72. { error: "Failed to delete file" },
  73. { status: 500 }
  74. );
  75. response.headers.set('Access-Control-Allow-Origin', '*');
  76. return response;
  77. } finally {
  78. await prisma.$disconnect();
  79. }
  80. };
  81. export const OPTIONS = async () => {
  82. const response = new NextResponse(null, { status: 200 });
  83. response.headers.set('Access-Control-Allow-Origin', '*');
  84. response.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  85. response.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  86. return response;
  87. };